package kiv.pt;

import java.awt.geom.Point2D;
import java.util.ArrayList;
import java.util.List;

/**
 * Zastupuje zdroj energie.
 * @author Zdeněk Janeček
 *
 */
public class ZdrojEnergie {
    private int vykon;
    
    private final Point2D.Double coord;
    private final int id;
    
    // Indexy do pole, kde najdu skutečnou instanci.
    private final List<Integer> mista;
    private Integer[] mistaPublic = null;
    
    /**
     * Jakýkoli zdroj energie.
     * @param coord Souřadnice tohoto objektu.
     * @param pocetSousedu Informační počet pro konstruktor. Sousedi jsou odběrná místa. Nikdy další zdroje energie.
     * @param id Id je současně indexem do pole {@code DataGuru.zdroje}.
     */
    public ZdrojEnergie(Point2D.Double coord, int pocetSousedu, int id) {
        this.coord = coord;
        this.id = id;
        
        mista = new ArrayList<Integer>(pocetSousedu);
    }

    /**
     * Nastaví aktuální výkon.
     * @param vykon hodnota v kW.
     */
    public void setVykon(int vykon) {
        this.vykon = vykon;
    }

    /**
     * Aktuální výkon zdroje.
     * @return výkon v kW
     */
    public int getVykon() {
        return vykon;
    }

    /**
     * Souřadnice tohoto zdroje energie.
     * @return dvojrozměrný bod
     */
    public Point2D.Double getCoordinates() {
        return coord;
    }
    
    /**
     * ID odběrného místa
     * @return celočíselná hodnota
     */
    public int getId() {
        return id;
    }

    /**
     * Index odběrného místa.
     * @param m Index do pole {@code DataGuru.mista}.
     */
    public void addSoused(Integer m) {
        mista.add(m);
        mistaPublic = mista.toArray(new Integer[mista.size()]);
    }
    

    /**
     * Pole indexů sousedů. Použitelné přímo do pole {@code DataGuru.zdroje}.
     * @return celočíselná hodnota
     */
    public Integer[] seznamSousedu() {
        if (mistaPublic == null) {
            mistaPublic = mista.toArray(new Integer[mista.size()]);
        }
        return mistaPublic;
    }
}
